/***************************************************
> Copyright (C) 2024 ==KINGYI== All rights reserved.
> File Name: threadpool.c
> Author:cjy
> Mail: 
> Created Time: 2024年08月09日 星期五 17时50分26秒
***************************************************/
#include "queue.h"
#include "threadpool.h"
// 创建线程池            消费者函数个数  消息队列缓存区大小     消费者函数
THP *create_threadpool(int threads,int queue_length,void *(*con)(void *)) {
    // 创建线程池结构体指针
    THP *pool = malloc(sizeof(THP));
    // 消费者子线程id创建
    pool->tids = malloc(sizeof(pthread_t) * threads);
    // 缓冲区队列初始化
    pool->que = create_queue();
    // 初始化写信号
    sem_init(&pool->semw,0,queue_length);
    // 初始化读信号
    sem_init(&pool->semr,0,0);
    // 初始化锁
    pthread_mutex_init(&pool->mutex,NULL);
    // 线程数量
    pool->threads = threads;
    // 队列最大长度
    pool->queue_length_max = queue_length;
    int ret = 0;
    for (int i = 0;i < threads;i++) {
        ret = pthread_create(&pool->tids[i],NULL,con,pool);
        printf("线程数%d\n",i);
        if (ret != 0) {
            perror("pthread_create");
            exit(-1);
        }
    }
    return pool;
}


// 销毁线程池
void destroy_threadpool(THP *pool) {
    // 先接写信号
    sem_post(&pool->semw);
	printf("shifangxiaofeizhesaklfdjliawj\n");
    // 循环接读信号
    //for (int i= 0;i < pool->threads;i++) {
        
    //}
    // 循环接收消费者
    for(int i = 0;i < pool->threads;i++)
    {
	sem_post(&pool->semr);
        pthread_join(pool->tids[i],NULL);
	// 删除信号读
    	sem_destroy(&pool->semr);
    }

    
    // 删除信号写
    sem_destroy(&pool->semw);
    pthread_mutex_destroy(&pool->mutex);
}


